package org.TCC_NOVO.client.visual;

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormHandler;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormSubmitEvent;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Function;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import java.util.ArrayList;
import org.TCC_NOVO.client.modelo.Atividade_Roteiro;
import org.TCC_NOVO.client.GWTServiceAsync;

public class BaixarArquivosProjetosPanel extends Panel{
    private final GWTServiceAsync controller;
    String IDF_Usuario;

    FormPanel form;
    FileUpload upload;

    BaixarArquivosProjetosPanel self;
    Store store;
    GridPanel grid;
    RecordDef recordDef;
    Toolbar toolbar;
    ArrayList<Atividade_Roteiro> ArrayTarefas = new ArrayList();

    public BaixarArquivosProjetosPanel(GWTServiceAsync controller, String IDF_Usua) {
        this.controller = controller;
        this.IDF_Usuario = IDF_Usua;
        this.self = this;
        this.init();
    }

    private void init(){
        this.setBorder(true);
        this.setPaddings(2);

        recordDef = new RecordDef(new FieldDef[]{
            new IntegerFieldDef("ID"),
            new StringFieldDef("projeto"),
            new StringFieldDef("unidade"),
            new StringFieldDef("titulo"),
            new StringFieldDef("descricao"),
            new StringFieldDef("data_Entrega"),
            new StringFieldDef("responsavel"),
            new StringFieldDef("status"),
            new StringFieldDef("IDF_Resp"),
            new StringFieldDef("data_Entrega_Form"),
        });

        store = new Store(recordDef);
        grid = new GridPanel();
        grid.setStore(store);

        ColumnConfig[] columns = new ColumnConfig[]{
            new ColumnConfig("Nome Projeto", "projeto", 140, true),
            new ColumnConfig("Nome Unidade", "unidade", 190, true),
            new ColumnConfig("Título", "titulo", 150, true),
            new ColumnConfig("Descrição", "descricao", 270, true),
            new ColumnConfig("Status", "status", 120, true),
            new ColumnConfig("Data Entrega", "data_Entrega", 90, true),
            new ColumnConfig("Responsável", "responsavel", 90, true),
        };

        ColumnModel columnModel = new ColumnModel(columns);
        grid.setColumnModel(columnModel);
        grid.setFrame(true);
        grid.setStripeRows(true);
        grid.setSize(1020, 565);
        grid.setAutoScroll(true);
        grid.setTitle("Tarefas");
        grid.addTool(new Tool(Tool.REFRESH, new Function() {
            @Override
            public void execute() {
                grid.getEl().mask("Carregando", "x-mask-loading");
                CarrgarGrid();
                Timer timer = new Timer() {
                    @Override
                    public void run() {
                        grid.getEl().unmask();
                    }
                };
                timer.schedule(1000);
            }
        }, "Atualizar"));

        toolbar = getToolbar();
        toolbar.setSize(grid.getWidth(), 30);

        this.add(toolbar);
        this.add(grid);

        //carrega as informações para o grid...
        CarrgarGrid();
    }

    private class CallBackRetTarefas implements AsyncCallback<ArrayList<Atividade_Roteiro>> {
        @Override
	public void onFailure(Throwable e) {
		MessageBox.alert("Erro ao carregar dados... ", e.getMessage());
	}
        @Override
	public void onSuccess(ArrayList<Atividade_Roteiro> result) {
                CarregarDados(result);
        }
    }

    private void CarregarDados(ArrayList<Atividade_Roteiro> result){
        ArrayTarefas = result;
        for (int i = 0; i < result.size(); ++i) {
            addRecord(result.get(i));
        }
    }

    public void CarrgarGrid(){
        store.removeAll();
        String sSQL = "select A.ID, A.Titulo, A.Descricao, B.Nick, "+
                      "A.IDF_Resp, A.Status, A.Data_entrega, D.Nome NmUnidade, E.Nome NmProjeto, D.ID IDF_Unidade "+
                      "from ATIVIDADE_ROTEIRO A "+
                      "inner join USUARIO B on B.ID = A.IDF_Resp "+
                      "inner join UNIDADE D on D.ID = A.IDF_Unidade "+
                      "inner join PROJETO E on E.ID = D.IDF_Projeto "+
                      "where (A.Status = 'Concluída') "+
                      "order by E.Nome ";
        controller.RetornarDadosTarefa(sSQL, new CallBackRetTarefas());
    }


    public void addRecord(Atividade_Roteiro Tarefa){
        Object[] rowData = new Object[]{
          Tarefa.getId(),
          Tarefa.getNm_projeto(),
          Tarefa.getNm_unidade(),
          Tarefa.getTitulo(),
          Tarefa.getDescricao(),
          Tarefa.getData_entrega(),
          Tarefa.getResponsavel(),
          Tarefa.getStatus(),
          Tarefa.getIdf_responsavel(),
          Tarefa.getData_entrega_formatada(),
        };
        Record record = recordDef.createRecord(rowData[0].toString(), rowData);
        store.add(record);
    }

    public Toolbar getToolbar(){
        ToolbarButton btnBaixarArq = new ToolbarButton();
        btnBaixarArq.setText(" Baixar Arquivo");
        btnBaixarArq.setIcon("Images/download.png");
        btnBaixarArq.setTooltip("Permite baixar o arquivo da tarefa selecionada");
        btnBaixarArq.addListener(new ButtonListenerAdapter(){
            @Override
            public void onClick(Button button, EventObject e){
                if (grid.getSelectionModel().getSelected() == null){
                    MessageBox.alert("Necessário Selecionar Algum Registro! ");
                }else{
                    form = new FormPanel();
                    form.setAction("ServletDownload");
                    form.setEncoding(FormPanel.ENCODING_MULTIPART);
                    form.setMethod(FormPanel.METHOD_POST);

                    VerticalPanel panel = new VerticalPanel();
                    form.setWidget(panel);
                    upload = new FileUpload();
                    panel.add(upload);

                    //Adiciona o evento no form.
                    form.addFormHandler(new FormHandler() {
                        @Override
                        public void onSubmitComplete(FormSubmitCompleteEvent event) {
                            System.out.println(event.getResults());
                        }
                        @Override
                        public void onSubmit(FormSubmitEvent event) { }
                    });
                    
                    //arquivo.setValue(gridMaster.getSelectionModel().getSelected().getAsString("ID"));
                    upload.setName("Tarefas"+","+grid.getSelectionModel().getSelected().getAsString("ID"));
                    form.submit();
                }
            }
        });

        /*form = new FormPanel();
        form.setAction("ServletDownload");
        form.setEncoding(FormPanel.ENCODING_MULTIPART);
        form.setMethod(FormPanel.METHOD_POST);

        VerticalPanel panel = new VerticalPanel();
        form.setWidget(panel);
        upload = new FileUpload();
        panel.add(upload);

        //Adiciona o evento no form.
        form.addFormHandler(new FormHandler() {
            @Override
            public void onSubmitComplete(FormSubmitCompleteEvent event) {
                System.out.println(event.getResults());
            }
            @Override
            public void onSubmit(FormSubmitEvent event) { }
        });*/

        Toolbar toobar = new Toolbar();
        toobar.addButton(btnBaixarArq);

        return toobar;
    }

}
